package com.uzai.console.service.deviceauth.impl;

import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.uzai.common.exception.BusinessException;
import com.uzai.common.result.ResponseCode;
import com.uzai.console.common.utils.DateUtil;
import com.uzai.console.dto.devicegroup.DeviceGroupIdDto;
import com.uzai.console.dto.devicegroup.DeviceGroupInfoDto;
import com.uzai.console.dto.devicegroup.DeviceGroupQuery;
import com.uzai.console.dto.wechatprivate.devicewechatinfo.DeviceWechatInfoQuery;
import com.uzai.console.entity.DeviceAuth;
import com.uzai.console.entity.DeviceGroup;
import com.uzai.console.entity.DeviceWechatInfo;
import com.uzai.console.mapper.*;
import com.uzai.console.service.deviceauth.DeviceAuthService;
import com.uzai.console.service.devicegroup.DeviceGroupService;
import com.uzai.console.vo.devicegroup.DeviceGroupInfoVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 订单状态
 * @author liuqi
 * @date 2021年08月19日 16:50
 */
@Service
public class DeviceAuthServiceImpl implements DeviceAuthService {

    @Autowired
    private DeviceAuthMapper deviceAuthMapper;

    /**
     * 查询购买产品的开始时间
     * 1-购买单个产品，开始时间就是该产品的上次购买结束时间，如果结束时间为空或者已经过期，则为当前时间
     * 2-购买全部产品，则循环执行上一步，找出最早的到期时间
     * @author jitwxs
     * @date 2022/8/26 10:29
     * @param deviceId
     * @param productCodeList
     * @return java.lang.Integer
     */
    public int selectEarliestAuthByDeviceIdAndProductCodeList(String deviceId, List<String> productCodeList, int now){
        int expiredTimeReturn = 0;
        //循环产品，依次找出最早的到期时间
        for(String productCode : productCodeList){
            DeviceAuth deviceAuth = deviceAuthMapper.selectByDeviceIdAndProductCode(deviceId, productCode);
            int expiredTimeDemo = 0;
            //如果当前产品的到期时间不为空，则取当前的到期时间，如果当前的到期时间为空，则默认现在
            if(deviceAuth != null && deviceAuth.getExpireTime() != null){
                expiredTimeDemo = deviceAuth.getExpireTime().intValue();
            }else {
                expiredTimeDemo = now;
            }
            //第一个产品默认等于返回值
            if(expiredTimeReturn == 0){
                expiredTimeReturn = expiredTimeDemo;
            }else{
                //当前产品的到期时间与返回的时间比较，如果比返回的时间少，则返回的时间等该时间
                if(expiredTimeDemo < expiredTimeReturn){
                    expiredTimeReturn = expiredTimeDemo;
                }
            }
        }

        if(expiredTimeReturn < now){
            expiredTimeReturn = now;
        }
        return expiredTimeReturn;
    }

}
